#include "RegisterFilter.h"

#include <regex>

#include "utils/response.h"

using namespace drogon;

/**
 * 构造函数
 */
RegisterFilter::RegisterFilter() = default;

/**
 * 执行过滤
 * @param req 请求对象
 * @param fcb 拒绝请求回调函数
 * @param fccb 同意请求回调函数
 */
void RegisterFilter::doFilter(const HttpRequestPtr &req,
                              FilterCallback &&fcb,
                              FilterChainCallback &&fccb) {
    
    // 创建json响应对象
    auto response = HttpResponse::newHttpJsonResponse(response::InvalidParametersResponse());
    response->setStatusCode(k403Forbidden);

    // 获取请求体的JSON对象
    auto json = req->jsonObject();
    // 检查JSON对象是否为空
    if (!json) {
        fcb(response);
        return;
    }

    // 获取username字段的值
    std::string username = json->get("username", "").asString();

    // 使用正则表达式验证username字段的值
    std::regex pattern_username("^[\u4e00-\u9fa5a-zA-Z0-9@_.-]{4,15}$");
    if (!std::regex_match(username, pattern_username)) {
        fcb(response);
        return;
    }

    // 调用父类过滤
    AuthFilter::doFilter(req, std::forward<FilterCallback>(fcb), std::forward<FilterChainCallback>(fccb));
    fccb();
}
